Registers:
RAX, RBX, RCX, RDX, RBP, RSI, RDI, and RSP. The second eight are named R8-R15
                    *                   *

 ^   env        ^         ^    ^

div/mul use:
RAX, RDX
https://en.wikibooks.org/wiki/X86_Assembly/Arithmetic

system calls use:
RAX, RDI, RSI, RDX
(and destroy RCX)
http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/

our convention:
return registers: RAX
stack and base pointer: RSP, RBP
env register: RBX


RAX can act as 'argument 1' as well as the return register

RCX as a temporary/working register. systemcalls destroy it!
RDI, RSI, RDX

R8 to R15 are free to mess around with

ARGUMENTS:
1: RAX
2: R8
3: R9
...
